--- 模块功能：矩阵键盘测试
-- @module powerKey
-- @author openLuat
-- @license MIT
-- @copyright openLuat
-- @release 2018.06.13


module(..., package.seeall)


--[[
sta：按键状态，IDLE表示空闲状态，PRESSED表示已按下状态，LONGPRESSED表示已经长按下状态
longprd：长按键判断时长，默认3秒；按下大于等于3秒再弹起判定为长按键；按下后，在3秒内弹起，判定为短按键
longcb：长按键处理函数
shortcb：短按键处理函数
]]
local sta,longprd = "IDLE",1500

local function longtimercb()
    log.info("keypad.longtimercb")
    sta = "LONGPRESSED"
end

local lcd_out = pins.setup(pio.P0_7,1)--GPIO7配置为输出

local function keyMsg(msg)
    --msg.key_matrix_row：行
    --msg.key_matrix_col：列
    --msg.pressed：true表示按下，false表示弹起
    --log.info("keyMsg",msg.key_matrix_row,msg.key_matrix_col,msg.pressed)
    if msg.pressed then
        disp.sleep(0)
        lcd_out(1)
        if msg.key_matrix_row == 2 then
            if msg.key_matrix_col == 1 then
                sys.publish("key","key_up")
            elseif msg.key_matrix_col == 2 then
                sys.publish("key","key_back")
            elseif msg.key_matrix_col == 3 then
            end
        elseif msg.key_matrix_row == 3 then
            if msg.key_matrix_col == 1 then
                sys.publish("key","key_down")
            elseif msg.key_matrix_col == 2 then
            end
        elseif msg.key_matrix_row == 4 then
            if msg.key_matrix_col == 1 then
                sys.publish("key","key_left")
            elseif msg.key_matrix_col == 2 then
                sys.publish("key","key_right")
            end
        elseif msg.key_matrix_row == 255 then
            if msg.key_matrix_col == 255 then
                sta = "PRESSED"
                sys.timerStart(longtimercb,longprd)
            end
        end
    else
        sys.timerStop(longtimercb)
        if sta=="PRESSED" then
            sys.publish("key","key_ok")
        elseif sta=="LONGPRESSED" then
            rtos.poweroff()
		end
		sta = "IDLE"
    end
end

--注册按键消息处理函数
rtos.on(rtos.MSG_KEYPAD,keyMsg)
--初始化键盘阵列
--第一个参数：固定为rtos.MOD_KEYPAD，表示键盘
--第二个参数：目前无意义，固定为0
--第三个参数：表示键盘阵列keyin标记，例如使用了keyin0、keyin1、keyin2、keyin3，则第三个参数为1<<0|1<<1|1<<2|1<<3 = 0x0F
--第四个参数：表示键盘阵列keyout标记，例如使用了keyout0、keyout1、keyout2、keyout3，则第四个参数为1<<0|1<<1|1<<2|1<<3 = 0x0F
rtos.init_module(rtos.MOD_KEYPAD,0,0x1C,0x0E)

